/* eslint-disable */
const axios = require('axios');
// import qs from 'qs'
axios.defaults.baseURL = 'http://127.0.0.1:8000'; // 所有请求的默认地址
axios.defaults.timeout = 10000;  // 请求超时时间
// axios.defaults.withCredentials = true;  // ajax请求携带cookie,   后端需要允许携带cookie

/**
 * 设置请求传递数据的格式（看服务器要求的格式）
 * x-www-form-urlencoded
 * 默认提交表单
 * 把数据对象序列化成 表单数据
 */
// axios.defaults.headers['Content-Type'] = 'application/x-www-form-urlencoded';
// axios.defaults.transformRequest = data => qs.stringify(data);

/**
 * 设置默认提交 json
 * 把数据对象序列化成 json 字符串
 */
axios.defaults.headers['Content-Type'] = 'application/json';
axios.defaults.transformRequest = data => JSON.stringify(data);


/**
 * 请求拦截器
 */
axios.interceptors.request.use(config => {
  // 从localStorage中获取token
  let token = localStorage.getItem('token');
  // 如果有token, 就把token设置到请求头中Authorization字段中
  token && (config.headers.Authorization = 'JWT '+token);
  return config;
}, error => {
  return Promise.reject(error);
});

/**
 * 响应拦截器
 */
axios.interceptors.response.use(response => {
  // 当响应码是 2xx 的情况, 进入这里
  // debugger
  return response;
}, error => {
  // 当响应码不是 2xx 的情况, 进入这里
  // debugger
  if(error.config.url=='/user/login/' && error.response.status==400){  // 请求参数有误
    alert('登录失败')
  }
  return error
});
/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function get(url, params, headers) {
  return new Promise((resolve, reject) => {
    axios.get(url, { params, headers }).then(res => {
      // debugger
      resolve(res.data)
    }).catch(err => {
      // debugger
      reject(err.data)
    })
  })
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 **/
// 宏任务, 微任务  js事件循环里的概念
export function post(url, params, headers) {
  return new Promise((resolve, reject) => {
    axios.post(url, params, headers).then((res) => {
      // debugger
      resolve(res.data)
    }).catch((err) => {
      // debugger
      reject(err.data)
    })
  })
}
export default axios;
